1. Field of the Invention
The present invention relates to request-response messaging systems of the type where tags are used to match request messages with response messages.
2. Background Art
Peripheral Component Interconnect Express (PCIe) is one of many response-request messaging standards used to facilitate communications between computer components and other entities. The present invention applies to this and other response-request messaging systems where tags are used to provide a matching mechanism to match request messages with their corresponding response message. A tag is any identifier attached or otherwise associated with response/request messages that facilitates tracking the messages and distinguishing one message from another.
PCIe and other tag-based messaging systems generate a number of tags and arrange them into a pool. An unused tag is selected from the pool when required to identify a response-request messaging communication for a particular transaction. During proper operation, the request message is issued with a selected one of the pooled tags and a response having the same tag is eventually received in response. The tag can be re-used in a subsequent request once it the response associate with the previous request is received. In some cases, a timer may be used to monitor a period of time extending from issuance of the request to receipt of the response. If this period of time surpasses a threshold-period, the request may be timed-out and the associated tag may be reused in another request.
The reuse of the tag, however, can be problematic if the long awaited response is received after issuance of another request with the same tag and a requester processes the overdue response as if it was a proper response to the more recent request issued with the same tag. FIG. 1 illustrates this type of error where a response arrives after issuing another request with the same tag.
During normal operation, a request 1 issues with a tag A selected from a pool of tags in anticipation of receiving a response 1 with the matching tag A. A subsequent request 2 can reuse the tag A once the request 1 is received. If a timeout period elapses prior to receiving the response 2, another request 3 may issue with the same tag A. The error, commonly referred to as a ghost completion, occurs when the response 2 to the previous request 2 arrives after the request 3 issues with the reused tag A.
The processing of the wrong response as if it were the right response can lead to ghost completion and silent data corruption issues. PCIe and other response-request messaging systems may experience these issues, whether due to their reliance one the described timeout-based tag reuse strategy or some other strategy.